﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Drawing;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;
using Microsoft.Reporting.WinForms;
using System.Windows.Forms.Integration;
using System.Windows.Media.Imaging;
using System.IO;

namespace CapaPresentacion.Controles
{
    class ReporteInscripcionAlumnoViewModel
    {

        public event ReiniciarCU ReiniciarCU;

        private RelayCommand reporteInscripcionAlumnoCommand;
        private RelayCommand buscarAlumnosCommand;

        ReporteInscripcionAlumno view;
        Guid idCicloLectivo;
        Guid idSeleccionado;


        public Guid IdCicloLectivo
        {
            get
            {
                return idCicloLectivo;
            }
            set
            {
                idCicloLectivo = value;

            }
        }

        public Guid IdSeleccionado
        {
            get
            {
                return idSeleccionado;
            }
            set
            {
                idSeleccionado = value;

            }
        }

        public List<ViewEntity> ListaCiclosLectivos { get; set; }
        public List<ViewEntity> ListaAlumnos { get; set; }

        public ICommand ReporteInscripcionAlumnoCommand
        {
            get
            {
                return reporteInscripcionAlumnoCommand;
            }
        }

        public ICommand BuscarAlumnosCommand
        {
            get
            {
                return buscarAlumnosCommand;
            }
        }

        public ReporteInscripcionAlumnoViewModel() { }


        public void Inicializar(ReporteInscripcionAlumno vista)
        {

            ListaCiclosLectivos = new CicloLectivoLogica().ObtenerEntidades();

            if (ListaCiclosLectivos.Count > 0 && ListaCiclosLectivos != null)
            {
                this.view = vista;
                this.reporteInscripcionAlumnoCommand = new RelayCommand(ReporteInscripcion);
                this.buscarAlumnosCommand = new RelayCommand(BuscarAlumnos);
            }
            else
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No se han encontrado ciclos lectivos");
                nueva.ShowDialog();
                this.ReiniciarCU(CasosDeUso.NuevoCicloLectivo);

            }


        }



        private void BuscarAlumnos(Object parameter)
        {

            if (idCicloLectivo != Guid.Empty)
            {
                ListaAlumnos = new AlumnoLogica().ObtenerAlumnosCiclo(idCicloLectivo);

                if (ListaAlumnos.Count > 0)
                {
                    this.view.listaDatos.ItemsSource = ListaAlumnos;
                    this.view.lblNoSelected.Visibility = Visibility.Collapsed;
                    this.view.spAlumnosEncontrados.Visibility = Visibility.Visible;

                }
                else
                {

                    this.view.lblNoSelected.Visibility = Visibility.Collapsed;
                    this.view.spAlumnosEncontrados.Visibility = Visibility.Collapsed;
                    VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No se han encontrado alumnos inscriptos al ciclo lectivo seleccionado");
                    nueva.ShowDialog();

                }
            }
            else
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe Seleccionar un Ciclo lectivo");
                nueva.ShowDialog();

            }


        }
        
        private void ReporteInscripcion(Object parameter)
        {
             if (this.idSeleccionado != Guid.Empty)
             {
                 this.view.lblNoSelected.Visibility = Visibility.Collapsed;                 

                 Alumno alumno = new AlumnoLogica().ObtenerEntidad(idSeleccionado);
                 InscripcionCicloLectivo inscripcion = new InscripcionAlumnoLogica().ObtenerEntidad(idCicloLectivo, idSeleccionado);


                 alumno.PadreTutor = new Familiar();
                 alumno.MadreTutora = new Familiar();

                 alumno.Urgencia1 = new Familiar();
                 alumno.Urgencia2 = new Familiar();

                 alumno.Autorizado1 = new Familiar();
                 alumno.Autorizado2 = new Familiar();

                 var existeMadre = (from v in alumno.AlumnoFamiliares
                                    where v.IdParentesco == new ParentescoLogica().ObtenerIdMadreTutora()
                                    select v.LegajoFamiliar).Any();

                 if (existeMadre)
                 {
                     var idMadre = (from v in alumno.AlumnoFamiliares
                                    where v.IdParentesco == new ParentescoLogica().ObtenerIdMadreTutora()
                                    select v.LegajoFamiliar).First();

                     alumno.MadreTutora = new FamiliarAlumnoLogica().ObtenerEntidad(idMadre);
                   
                 }


                 var existePadre = (from v in alumno.AlumnoFamiliares
                                    where v.IdParentesco == new ParentescoLogica().ObtenerIdPadreTutor()
                                    select v.LegajoFamiliar).Any();

                 if (existePadre)
                 {
                     var idPadre = (from v in alumno.AlumnoFamiliares
                                    where v.IdParentesco == new ParentescoLogica().ObtenerIdPadreTutor()
                                    select v.LegajoFamiliar).First();

                     alumno.PadreTutor = new FamiliarAlumnoLogica().ObtenerEntidad(idPadre);
                 }


                 var cantidadUrgencia = (from v in alumno.AlumnoFamiliares
                                         where v.Urgencia == true
                                         select v.LegajoFamiliar).ToList();

                 if (cantidadUrgencia.Count > 0)
                 {
                     if (cantidadUrgencia.Count == 1)
                     {
                         alumno.Urgencia1 = new FamiliarAlumnoLogica().ObtenerEntidad(cantidadUrgencia[0]);
                     }


                     if (cantidadUrgencia.Count == 2)
                     {
                         alumno.Urgencia1 = new FamiliarAlumnoLogica().ObtenerEntidad(cantidadUrgencia[0]);
                         alumno.Urgencia2 = new FamiliarAlumnoLogica().ObtenerEntidad(cantidadUrgencia[1]);
                       
                     }


                 }                              
                 
                 InformeAlumno informe = new InformeAlumno(alumno, inscripcion);


                 if (alumno.FotoAlumno != null)
                     informe.Imagen = alumno.FotoAlumno;
                 else
                 {
                     System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
                     Stream myStream = myAssembly.GetManifestResourceStream("CapaPresentacion.Imagenes.SinImagen.bmp");
                     Bitmap imagen = new Bitmap(myStream);
                                      
                     informe.Imagen = Utilidades.ImageUtil.Image2Bytes(imagen);
                 }

                 InformeAlumno[] alumnos = new InformeAlumno[] { informe };

                 this.view.rvInscripcionAlumno.ProcessingMode = ProcessingMode.Local;

                 this.view.rvInscripcionAlumno.LocalReport.DataSources.Clear();
                 this.view.rvInscripcionAlumno.LocalReport.DataSources.Add(new ReportDataSource("DatosInscripcionAlumno", alumnos));
                 this.view.rvInscripcionAlumno.LocalReport.EnableExternalImages = true; 
                 
                 this.view.rvInscripcionAlumno.LocalReport.ReportEmbeddedResource = "CapaPresentacion.Controles.ReporteInscripcionAlumno.rdlc";
                 this.view.rvInscripcionAlumno.ShowBackButton = false;
                 this.view.rvInscripcionAlumno.ShowRefreshButton = false;               

                 this.view.rvInscripcionAlumno.RefreshReport();

                 this.view.spReporte.Visibility = Visibility.Visible;




             }
             else
             {
                 this.view.lblNoSelected.Visibility = Visibility.Visible;
             }


        }






    }
}
